'use strict';
const db = uniCloud.database();

// 格式化日期为 YYYY-MM-DD
function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

exports.main = async (event, context) => {
  try {
    console.log('1. 开始执行云函数');

    // 获取当天的时间范围（增加时区修正）
    const today = new Date();
    today.setUTCHours(0, 0, 0, 0); // 统一使用 UTC 时间
    console.log('2. 修正后的当前日期:', formatDate(today));
    console.log('云函数 today 值:', today.toISOString());
    console.log('写入数据库的 date 字段类型:', typeof today);

    // 查询当天的所有用餐记录
    console.log('4. 开始查询当天的用餐记录');
    const canteenRes = await db.collection('canteen')
      .where({
        createTime: db.command.and(db.command.gte(today.getTime()), db.command.lt(today.getTime() + 24 * 60 * 60 * 1000)) // 当天时间范围
      })
      .get();
    console.log('5. 当天用餐记录:', canteenRes.data);

    // 按部门统计用餐人数
    console.log('6. 开始按部门统计用餐人数');
    const statsByDepartment = {};
    canteenRes.data.forEach(record => {
      const department = record.department;
      if (!statsByDepartment[department]) {
        statsByDepartment[department] = { lunchCount: 0, dinnerCount: 0 };
      }
      if (record.lunch) statsByDepartment[department].lunchCount++;
      if (record.dinner) statsByDepartment[department].dinnerCount++;
    });
    console.log('7. 按部门统计结果:', statsByDepartment);

    // 更新或插入 meal_statistics 表
    console.log('8. 开始更新或插入 meal_statistics 表');
    for (const department in statsByDepartment) {
      const { lunchCount, dinnerCount } = statsByDepartment[department];
      console.log(`9. 处理部门: ${department}`, { lunchCount, dinnerCount });

      // 查询是否存在当天的记录
      console.log(`10. 查询部门 ${department} 的当天统计记录`);
      const statQueryRes = await db.collection('meal_statistics')
        .where({
          date: today, // 直接匹配日期对象
          department: department
        })
        .get();
      console.log(`11. 部门 ${department} 的当天统计记录:`, statQueryRes.data);

      if (statQueryRes.data.length > 0) {
        // 如果存在记录，则更新
        console.log(`12. 部门 ${department} 存在记录，开始更新`);
        const statUpdateRes = await db.collection('meal_statistics')
          .doc(statQueryRes.data[0]._id)
          .update({
            lunchCount,
            dinnerCount
          });
        console.log(`13. 部门 ${department} 统计记录更新结果:`, statUpdateRes);
      } else {
        // 如果不存在记录，则插入新记录
        console.log(`14. 部门 ${department} 不存在记录，开始插入新记录`);
        console.log(`15. 插入的日期:`, formatDate(today)); // 格式化日期
        const statAddRes = await db.collection('meal_statistics')
          .add({
            date: today, // 使用 Date 对象
            department,
            lunchCount,
            dinnerCount
          });
        console.log(`16. 部门 ${department} 统计记录插入结果:`, statAddRes);
      }
    }

    console.log('17. 统计更新成功');
    return {
      code: 0,
      message: '统计更新成功'
    };
  } catch (error) {
    console.error('18. 统计更新失败:', error);
    return {
      code: -1,
      message: error.message || '统计更新失败'
    };
  }
}; 